%     FASTENER DOCTOR - программа для лечения и конвертации крепежа
%     Copyright (C) 2018  Михаил Козлов
%     Сайт проекта: <http://www.fastenerdoctor.ru/>
%     Адрес электронной почты для связи с разработчиком:
%     <doctor.fastener@gmail.com>
% 
%     Эта программа является свободным программным обеспечением: Вы можете
%     распространять ее и/или изменять, соблюдая условия Универсальной общественной
%     лицензии GNU, опубликованной Фондом свободного программного обеспечения,
%     либо редакции 3, либо (на Ваше усмотрение) любой редакции, выпущенной позже.
% 
%     Эта программа распространяется в надежде на то, что она окажется полезной,
%     но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, включая даже подразумеваемую гарантию ТОВАРНОЙ ПРИГОДНОСТИ,
%     либо ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Ознакомьтесь с Универсальной общественной
%     лицензией GNU для получения более подробной информации.
% 
%     Вы должны были получить копию Универсальной общественной лицензии GNU
%     вместе с этой программой. Если Вы ее не получили, то перейдите по адресу:
%     <http://www.gnu.org/licenses/>.
% 
%     This program is free software: you can redistribute it and/or modify
%     it under the terms of the GNU General Public License as published by
%     the Free Software Foundation, either version 3 of the License, or
%     (at your option) any later version.
% 
%     This program is distributed in the hope that it will be useful,
%     but WITHOUT ANY WARRANTY; without even the implied warranty of
%     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
%     GNU General Public License for more details.
% 
%     You should have received a copy of the GNU General Public License
%     along with this program.  If not, see <https://www.gnu.org/licenses/>.

function COORD = Read_COORD(Fin, N_Coord, Coord_start_position)

% COORD (карточки CORD2R, CORD2C) | .card | .ID | .Reference_Coord_ID | .A | .B | .C |

global ErrCode;
global Progress_Bar_Segments;
global Progress_Bar_Delay;

fprintf (1, '    Чтение систем координат...          ');

COORD = cell(N_Coord,1);

fseek(Fin, Coord_start_position, 'bof');

Coord_read_counter = 0;


% Для вывода прогресса
Time_segments = Progress_Bar_Segments;
N_records = N_Coord;
N_rec_segm = floor(N_records/Time_segments);
Counter = 0;
Counter_2 = 0;
Written_count = 0;


while (~feof(Fin))
    
    if (Coord_read_counter == N_Coord)
        break;        
    end
    
    string = fgets(Fin);
    
    if (string(1) == 'C')
        
        % Чтение CORD2R
        
        if ((length(string) >= 7) && strcmp(string(2:7), 'ORD2R ')) % SMALL FIELD FORMAT
            
            Coord_read_counter = Coord_read_counter + 1;
            
            COORD{Coord_read_counter}.card = 'CORD2R';
            COORD{Coord_read_counter}.ID = [];
            COORD{Coord_read_counter}.Reference_Coord_ID = 0;
            COORD{Coord_read_counter}.A = zeros(3,1);
            COORD{Coord_read_counter}.B = zeros(3,1);
            COORD{Coord_read_counter}.C = zeros(3,1);

            % Чтение ID
            tmp_number = str2double(string(9:16));
            if (isnan(tmp_number))
                fprintf (1, '\nНеправильная запись с номером системы координат в карточке CORD2R : [%s] !\n', strtrim(string(9:16)));
                ErrCode = -1;
                return;
            end
            COORD{Coord_read_counter}.ID = tmp_number;
            
            % проверка на записи в 10-ом поле
            if (deblank(string) > 72)
                fprintf (1, '\nОбнаружена запись в поле 10 первой строки карточки CORD2R %i !\n', COORD{Coord_read_counter}.ID);
                fprintf (1, 'Указатели продления карточки не поддерживаются в текущей версии программы.\n');
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end

            % Чтение Reference Coord ID
            if (~isnan(str2double(string(17:24))))
                COORD{Coord_read_counter}.Reference_Coord_ID = str2double(string(17:24));
            end

            % Чтение A1
            tmp_number = str2double(string(25:32));
            if (isnan(tmp_number))
                tmp_number_2 = sscanf(string(25:32), '%e%d');
                if (size(tmp_number_2,1) ~= 2)
                    fprintf (1, '\nНеправильная запись A1 в карточке CORD2R системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(25:32)));
                    ErrCode = -1;
                    return;
                end
                COORD{Coord_read_counter}.A(1) = tmp_number_2(1)*10^tmp_number_2(2);
            else
                COORD{Coord_read_counter}.A(1) = tmp_number;
            end

            % Чтение A2
            tmp_number = str2double(string(33:40));
            if (isnan(tmp_number))
                tmp_number_2 = sscanf(string(33:40), '%e%d');
                if (size(tmp_number_2,1) ~= 2)
                    fprintf (1, '\nНеправильная запись A2 в карточке CORD2R системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(33:40)));
                    ErrCode = -1;
                    return;
                end
                COORD{Coord_read_counter}.A(2) = tmp_number_2(1)*10^tmp_number_2(2);
            else
                COORD{Coord_read_counter}.A(2) = tmp_number;
            end

            % Чтение A3
            tmp_number = str2double(string(41:48));
            if (isnan(tmp_number))
                tmp_number_2 = sscanf(string(41:48), '%e%d');
                if (size(tmp_number_2,1) ~= 2)
                    fprintf (1, '\nНеправильная запись A3 в карточке CORD2R системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(41:48)));
                    ErrCode = -1;
                    return;
                end
                COORD{Coord_read_counter}.A(3) = tmp_number_2(1)*10^tmp_number_2(2);
            else
                COORD{Coord_read_counter}.A(3) = tmp_number;
            end

            % Чтение B1
            tmp_number = str2double(string(49:56));
            if (isnan(tmp_number))
                tmp_number_2 = sscanf(string(49:56), '%e%d');
                if (size(tmp_number_2,1) ~= 2)
                    fprintf (1, '\nНеправильная запись B1 в карточке CORD2R системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(49:56)));
                    ErrCode = -1;
                    return;
                end
                COORD{Coord_read_counter}.B(1) = tmp_number_2(1)*10^tmp_number_2(2);
            else
                COORD{Coord_read_counter}.B(1) = tmp_number;
            end

            % Чтение B2
            tmp_number = str2double(string(57:64));
            if (isnan(tmp_number))
                tmp_number_2 = sscanf(string(57:64), '%e%d');
                if (size(tmp_number_2,1) ~= 2)
                    fprintf (1, '\nНеправильная запись B2 в карточке CORD2R системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(57:64)));
                    ErrCode = -1;
                    return;
                end
                COORD{Coord_read_counter}.B(2) = tmp_number_2(1)*10^tmp_number_2(2);
            else
                COORD{Coord_read_counter}.B(2) = tmp_number;
            end

            % Чтение B3
            if (length(string) < 72)
                End_index = length(string);
            else
                End_index = 72;
            end
            tmp_number = str2double(string(65:End_index));
            if (isnan(tmp_number))
                tmp_number_2 = sscanf(string(65:End_index), '%e%d');
                if (size(tmp_number_2,1) ~= 2)
                    fprintf (1, '\nНеправильная запись B3 в карточке CORD2R системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(65:End_index)));
                    ErrCode = -1;
                    return;
                end
                COORD{Coord_read_counter}.B(3) = tmp_number_2(1)*10^tmp_number_2(2);
            else
                COORD{Coord_read_counter}.B(3) = tmp_number;
            end
            
            % Проверка на конец файла
            if (feof(Fin))
                fprintf (1, '\nНеожиданный конец файла во время чтения карточки CORD2R с номером %i !\n', COORD{Coord_read_counter}.ID);
                ErrCode = -1;
                return;
            end

            % Чтение следующей строки
            string = fgets(Fin);
            
            % Проверка строки
            if (~((string(1) == '*') || (string(1) == ' ')))
                fprintf (1, '\nВторая строка в карточке CORD2R системы координат %i не начинается с символа * или с пробела !\n', COORD{Coord_read_counter}.ID);
                ErrCode = -1;
                return;
            end
            
            % проверка на записи в 10-ом поле
            if (deblank(string) > 72)
                fprintf (1, '\nОбнаружена запись в поле 10 второй строки карточки CORD2R %i !\n', COORD{Coord_read_counter}.ID);
                fprintf (1, 'Указатели продления карточки не поддерживаются в текущей версии программы.\n');
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end
            
            if (string(1) == '*')

                % Вторая строка формата LARGE FIELD FORMAT
                
                % Чтение C1
                tmp_number = str2double(string(9:24));
                if (isnan(tmp_number))
                    tmp_number_2 = sscanf(string(9:24), '%e%d');
                    if (size(tmp_number_2,1) ~= 2)
                        fprintf (1, '\nНеправильная запись C1 в карточке CORD2R системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(9:24)));
                        ErrCode = -1;
                        return;
                    end
                    COORD{Coord_read_counter}.C(1) = tmp_number_2(1)*10^tmp_number_2(2);
                else
                    COORD{Coord_read_counter}.C(1) = tmp_number;
                end

                % Чтение C2
                tmp_number = str2double(string(25:40));
                if (isnan(tmp_number))
                    tmp_number_2 = sscanf(string(25:40), '%e%d');
                    if (size(tmp_number_2,1) ~= 2)
                        fprintf (1, '\nНеправильная запись C2 в карточке CORD2R системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(25:40)));
                        ErrCode = -1;
                        return;
                    end
                    COORD{Coord_read_counter}.C(2) = tmp_number_2(1)*10^tmp_number_2(2);
                else
                    COORD{Coord_read_counter}.C(2) = tmp_number;
                end

                % Чтение C3
                if (length(string) < 56)
                    End_index = length(string);
                else
                    End_index = 56;
                end
                tmp_number = str2double(string(41:End_index));
                if (isnan(tmp_number))
                    tmp_number_2 = sscanf(string(41:End_index), '%e%d');
                    if (size(tmp_number_2,1) ~= 2)
                        fprintf (1, '\nНеправильная запись C3 в карточке CORD2R системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(41:End_index)));
                        ErrCode = -1;
                        return;
                    end
                    COORD{Coord_read_counter}.C(3) = tmp_number_2(1)*10^tmp_number_2(2);
                else
                    COORD{Coord_read_counter}.C(3) = tmp_number;
                end
                
            else

                % Вторая строка формата SMALL FIELD FORMAT
                
                % Чтение C1
                tmp_number = str2double(string(9:16));
                if (isnan(tmp_number))
                    tmp_number_2 = sscanf(string(9:16), '%e%d');
                    if (size(tmp_number_2,1) ~= 2)
                        fprintf (1, '\nНеправильная запись C1 в карточке CORD2R системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(9:16)));
                        ErrCode = -1;
                        return;
                    end
                    COORD{Coord_read_counter}.C(1) = tmp_number_2(1)*10^tmp_number_2(2);
                else
                    COORD{Coord_read_counter}.C(1) = tmp_number;
                end

                % Чтение C2
                tmp_number = str2double(string(17:24));
                if (isnan(tmp_number))
                    tmp_number_2 = sscanf(string(17:24), '%e%d');
                    if (size(tmp_number_2,1) ~= 2)
                        fprintf (1, '\nНеправильная запись C2 в карточке CORD2R системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(17:24)));
                        ErrCode = -1;
                        return;
                    end
                    COORD{Coord_read_counter}.C(2) = tmp_number_2(1)*10^tmp_number_2(2);
                else
                    COORD{Coord_read_counter}.C(2) = tmp_number;
                end

                % Чтение C3
                if (length(string) < 32)
                    End_index = length(string);
                else
                    End_index = 32;
                end
                tmp_number = str2double(string(25:End_index));
                if (isnan(tmp_number))
                    tmp_number_2 = sscanf(string(25:End_index), '%e%d');
                    if (size(tmp_number_2,1) ~= 2)
                        fprintf (1, '\nНеправильная запись C3 в карточке CORD2R системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(25:End_index)));
                        ErrCode = -1;
                        return;
                    end
                    COORD{Coord_read_counter}.C(3) = tmp_number_2(1)*10^tmp_number_2(2);
                else
                    COORD{Coord_read_counter}.C(3) = tmp_number;
                end
                
            end

            
            % Для вывода прогресса
            Counter = Counter + 1;
            Counter_2 = Counter_2 + 1;
            if (Counter_2 == N_rec_segm)
                Counter_2 = 0;
                Written_count = Written_count + 1;
                if (Written_count < Time_segments)
                    fprintf (1, '#');
                    pause (Progress_Bar_Delay);
                end
            end
            
            
            continue;
            
        end
        
        if ((length(string) >= 7) && strcmp(string(2:7), 'ORD2R*')) % LARGE FIELD FORMAT
            
            Coord_read_counter = Coord_read_counter + 1;
            
            COORD{Coord_read_counter}.card = 'CORD2R';
            COORD{Coord_read_counter}.ID = [];
            COORD{Coord_read_counter}.Reference_Coord_ID = 0;
            COORD{Coord_read_counter}.A = zeros(3,1);
            COORD{Coord_read_counter}.B = zeros(3,1);
            COORD{Coord_read_counter}.C = zeros(3,1);

            % Чтение ID
            tmp_number = str2double(string(9:24));
            if (isnan(tmp_number))
                fprintf (1, '\nНеправильная запись с номером системы координат в карточке CORD2R* : [%s] !\n', strtrim(string(9:24)));
                ErrCode = -1;
                return;
            end
            COORD{Coord_read_counter}.ID = tmp_number;
            
            % проверка на записи в 10-ом поле
            if (deblank(string) > 72)
                fprintf (1, '\nОбнаружена запись в поле 10 первой строки карточки CORD2R* %i !\n', COORD{Coord_read_counter}.ID);
                fprintf (1, 'Указатели продления карточки не поддерживаются в текущей версии программы.\n');
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end

            % Чтение Reference Coord ID
            if (~isnan(str2double(string(25:40))))
                COORD{Coord_read_counter}.Reference_Coord_ID = str2double(string(25:40));
            end

            % Чтение A1
            tmp_number = str2double(string(41:56));
            if (isnan(tmp_number))
                tmp_number_2 = sscanf(string(41:56), '%e%d');
                if (size(tmp_number_2,1) ~= 2)
                    fprintf (1, '\nНеправильная запись A1 в карточке CORD2R* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(41:56)));
                    ErrCode = -1;
                    return;
                end
                COORD{Coord_read_counter}.A(1) = tmp_number_2(1)*10^tmp_number_2(2);
            else
                COORD{Coord_read_counter}.A(1) = tmp_number;
            end

            % Чтение A2
            if (length(string) < 72)
                End_index = length(string);
            else
                End_index = 72;
            end
            tmp_number = str2double(string(57:End_index));
            if (isnan(tmp_number))
                tmp_number_2 = sscanf(string(57:End_index), '%e%d');
                if (size(tmp_number_2,1) ~= 2)
                    fprintf (1, '\nНеправильная запись A2 в карточке CORD2R* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(57:End_index)));
                    ErrCode = -1;
                    return;
                end
                COORD{Coord_read_counter}.A(2) = tmp_number_2(1)*10^tmp_number_2(2);
            else
                COORD{Coord_read_counter}.A(2) = tmp_number;
            end
            
            % Проверка на конец файла
            if (feof(Fin))
                fprintf (1, '\nНеожиданный конец файла во время чтения карточки CORD2R* с номером %i !\n', COORD{Coord_read_counter}.ID);
                ErrCode = -1;
                return;
            end

            % Чтение следующей строки
            string = fgets(Fin);

            % Проверка строки
            if (~(string(1) == '*'))
                fprintf (1, '\nВторая строка в карточке CORD2R* системы координат %i не начинается с символа * !\n', COORD{Coord_read_counter}.ID);
                ErrCode = -1;
                return;
            end
            
            % проверка на записи в 10-ом поле
            if (deblank(string) > 72)
                fprintf (1, '\nОбнаружена запись в поле 10 второй строки карточки CORD2R* %i !\n', COORD{Coord_read_counter}.ID);
                fprintf (1, 'Указатели продления карточки не поддерживаются в текущей версии программы.\n');
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end

            % Чтение A3
            tmp_number = str2double(string(9:24));
            if (isnan(tmp_number))
                tmp_number_2 = sscanf(string(9:24), '%e%d');
                if (size(tmp_number_2,1) ~= 2)
                    fprintf (1, '\nНеправильная запись A3 в карточке CORD2R* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(9:24)));
                    ErrCode = -1;
                    return;
                end
                COORD{Coord_read_counter}.A(3) = tmp_number_2(1)*10^tmp_number_2(2);
            else
                COORD{Coord_read_counter}.A(3) = tmp_number;
            end

            % Чтение B1
            tmp_number = str2double(string(25:40));
            if (isnan(tmp_number))
                tmp_number_2 = sscanf(string(25:40), '%e%d');
                if (size(tmp_number_2,1) ~= 2)
                    fprintf (1, '\nНеправильная запись B1 в карточке CORD2R* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(25:40)));
                    ErrCode = -1;
                    return;
                end
                COORD{Coord_read_counter}.B(1) = tmp_number_2(1)*10^tmp_number_2(2);
            else
                COORD{Coord_read_counter}.B(1) = tmp_number;
            end

            % Чтение B2
            tmp_number = str2double(string(41:56));
            if (isnan(tmp_number))
                tmp_number_2 = sscanf(string(41:56), '%e%d');
                if (size(tmp_number_2,1) ~= 2)
                    fprintf (1, '\nНеправильная запись B2 в карточке CORD2R* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(41:56)));
                    ErrCode = -1;
                    return;
                end
                COORD{Coord_read_counter}.B(2) = tmp_number_2(1)*10^tmp_number_2(2);
            else
                COORD{Coord_read_counter}.B(2) = tmp_number;
            end

            % Чтение B3
            if (length(string) < 72)
                End_index = length(string);
            else
                End_index = 72;
            end
            tmp_number = str2double(string(57:End_index));
            if (isnan(tmp_number))
                tmp_number_2 = sscanf(string(57:End_index), '%e%d');
                if (size(tmp_number_2,1) ~= 2)
                    fprintf (1, '\nНеправильная запись B3 в карточке CORD2R* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(57:End_index)));
                    ErrCode = -1;
                    return;
                end
                COORD{Coord_read_counter}.B(3) = tmp_number_2(1)*10^tmp_number_2(2);
            else
                COORD{Coord_read_counter}.B(3) = tmp_number;
            end
            
            % Проверка на конец файла
            if (feof(Fin))
                fprintf (1, '\nНеожиданный конец файла во время чтения карточки CORD2R* с номером %i !\n', COORD{Coord_read_counter}.ID);
                ErrCode = -1;
                return;
            end

            % Чтение следующей строки
            string = fgets(Fin);

            % Проверка строки
            if (~((string(1) == '*') || (string(1) == ' ')))
                fprintf (1, '\nТретья строка в карточке CORD2R* системы координат %i не начинается с символа * или с пробела !\n', COORD{Coord_read_counter}.ID);
                ErrCode = -1;
                return;
            end
            
            % проверка на записи в 10-ом поле
            if (deblank(string) > 72)
                fprintf (1, '\nОбнаружена запись в поле 10 третьей строки карточки CORD2R* %i !\n', COORD{Coord_read_counter}.ID);
                fprintf (1, 'Указатели продления карточки не поддерживаются в текущей версии программы.\n');
                fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                ErrCode = -1;
                return;
            end

            if (string(1) == '*')

                % Третья строка формата LARGE FIELD FORMAT
                % Чтение С1
                tmp_number = str2double(string(9:24));
                if (isnan(tmp_number))
                    tmp_number_2 = sscanf(string(9:24), '%e%d');
                    if (size(tmp_number_2,1) ~= 2)
                        fprintf (1, '\nНеправильная запись C1 в карточке CORD2R* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(9:24)));
                        ErrCode = -1;
                        return;
                    end
                    COORD{Coord_read_counter}.C(1) = tmp_number_2(1)*10^tmp_number_2(2);
                else
                    COORD{Coord_read_counter}.C(1) = tmp_number;
                end

                % Чтение С2
                tmp_number = str2double(string(25:40));
                if (isnan(tmp_number))
                    tmp_number_2 = sscanf(string(25:40), '%e%d');
                    if (size(tmp_number_2,1) ~= 2)
                        fprintf (1, '\nНеправильная запись C2 в карточке CORD2R* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(25:40)));
                        ErrCode = -1;
                        return;
                    end
                    COORD{Coord_read_counter}.C(2) = tmp_number_2(1)*10^tmp_number_2(2);
                else
                    COORD{Coord_read_counter}.C(2) = tmp_number;
                end

                % Чтение С3
                if (length(string) < 56)
                    End_index = length(string);
                else
                    End_index = 56;
                end
                tmp_number = str2double(string(41:End_index));
                if (isnan(tmp_number))
                    tmp_number_2 = sscanf(string(41:End_index), '%e%d');
                    if (size(tmp_number_2,1) ~= 2)
                        fprintf (1, '\nНеправильная запись C3 в карточке CORD2R* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(41:End_index)));
                        ErrCode = -1;
                        return;
                    end
                    COORD{Coord_read_counter}.C(3) = tmp_number_2(1)*10^tmp_number_2(2);
                else
                    COORD{Coord_read_counter}.C(3) = tmp_number;
                end

            else

                % Третья строка формата SMALL FIELD FORMAT

                % Чтение С1
                tmp_number = str2double(string(9:16));
                if (isnan(tmp_number))
                    tmp_number_2 = sscanf(string(9:16), '%e%d');
                    if (size(tmp_number_2,1) ~= 2)
                        fprintf (1, '\nНеправильная запись C1 в карточке CORD2R* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(9:16)));
                        ErrCode = -1;
                        return;
                    end
                    COORD{Coord_read_counter}.C(1) = tmp_number_2(1)*10^tmp_number_2(2);
                else
                    COORD{Coord_read_counter}.C(1) = tmp_number;
                end

                % Чтение С2
                tmp_number = str2double(string(17:24));
                if (isnan(tmp_number))
                    tmp_number_2 = sscanf(string(17:24), '%e%d');
                    if (size(tmp_number_2,1) ~= 2)
                        fprintf (1, '\nНеправильная запись C2 в карточке CORD2R* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(17:24)));
                        ErrCode = -1;
                        return;
                    end
                    COORD{Coord_read_counter}.C(2) = tmp_number_2(1)*10^tmp_number_2(2);
                else
                    COORD{Coord_read_counter}.C(2) = tmp_number;
                end

                % Чтение С3
                if (length(string) < 32)
                    End_index = length(string);
                else
                    End_index = 32;
                end
                tmp_number = str2double(string(25:End_index));
                if (isnan(tmp_number))
                    tmp_number_2 = sscanf(string(25:End_index), '%e%d');
                    if (size(tmp_number_2,1) ~= 2)
                        fprintf (1, '\nНеправильная запись C3 в карточке CORD2R* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(25:End_index)));
                        ErrCode = -1;
                        return;
                    end
                    COORD{Coord_read_counter}.C(3) = tmp_number_2(1)*10^tmp_number_2(2);
                else
                    COORD{Coord_read_counter}.C(3) = tmp_number;
                end

            end
            
            
            % Для вывода прогресса
            Counter = Counter + 1;
            Counter_2 = Counter_2 + 1;
            if (Counter_2 == N_rec_segm)
                Counter_2 = 0;
                Written_count = Written_count + 1;
                if (Written_count < Time_segments)
                    fprintf (1, '#');
                    pause (Progress_Bar_Delay);
                end
            end
            
            
            continue;
            
        end
        
        if ((length(string) >= 7) && strcmp(string(2:7), 'ORD2R,')) % FREE FIELD FORMAT
            
            fprintf (1, '\nОшибка функции Read_COORD: FREE FIELD FORMAT файла bdf не поддерживается в текущей версии программы [CORD2R,] !\n');
            ErrCode = -1;
            return; 
            
        end
        
        
        % Чтение CORD2C (уникальное имя)
        
        if ((length(string) >= 6) && strcmp(string(2:6), 'ORD2C'))
            
            if (length(string) < 7)
                
                fprintf (1, '\nОшибка функции Read_COORD: length(string) < 7 в карточке CORD2C [%s] !\n', string);
                ErrCode = -1;
                return; 
                
            end
            
            switch string(7)
                
                case ' ' % SMALL FIELD FORMAT
                    
                    Coord_read_counter = Coord_read_counter + 1;

                    COORD{Coord_read_counter}.card = 'CORD2C';
                    COORD{Coord_read_counter}.ID = [];
                    COORD{Coord_read_counter}.Reference_Coord_ID = 0;
                    COORD{Coord_read_counter}.A = zeros(3,1);
                    COORD{Coord_read_counter}.B = zeros(3,1);
                    COORD{Coord_read_counter}.C = zeros(3,1);

                    % Чтение ID
                    tmp_number = str2double(string(9:16));
                    if (isnan(tmp_number))
                        fprintf (1, '\nНеправильная запись с номером системы координат в карточке CORD2C : [%s] !\n', strtrim(string(9:16)));
                        ErrCode = -1;
                        return;
                    end
                    COORD{Coord_read_counter}.ID = tmp_number;
                    
                    % проверка на записи в 10-ом поле
                    if (deblank(string) > 72)
                        fprintf (1, '\nОбнаружена запись в поле 10 первой строки карточки CORD2C %i !\n', COORD{Coord_read_counter}.ID);
                        fprintf (1, 'Указатели продления карточки не поддерживаются в текущей версии программы.\n');
                        fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                        ErrCode = -1;
                        return;
                    end

                    % Чтение Reference Coord ID
                    if (~isnan(str2double(string(17:24))))
                        COORD{Coord_read_counter}.Reference_Coord_ID = str2double(string(17:24));
                    end

                    % Чтение A1
                    tmp_number = str2double(string(25:32));
                    if (isnan(tmp_number))
                        tmp_number_2 = sscanf(string(25:32), '%e%d');
                        if (size(tmp_number_2,1) ~= 2)
                            fprintf (1, '\nНеправильная запись A1 в карточке CORD2C системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(25:32)));
                            ErrCode = -1;
                            return;
                        end
                        COORD{Coord_read_counter}.A(1) = tmp_number_2(1)*10^tmp_number_2(2);
                    else
                        COORD{Coord_read_counter}.A(1) = tmp_number;
                    end

                    % Чтение A2
                    tmp_number = str2double(string(33:40));
                    if (isnan(tmp_number))
                        tmp_number_2 = sscanf(string(33:40), '%e%d');
                        if (size(tmp_number_2,1) ~= 2)
                            fprintf (1, '\nНеправильная запись A2 в карточке CORD2C системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(33:40)));
                            ErrCode = -1;
                            return;
                        end
                        COORD{Coord_read_counter}.A(2) = tmp_number_2(1)*10^tmp_number_2(2);
                    else
                        COORD{Coord_read_counter}.A(2) = tmp_number;
                    end

                    % Чтение A3
                    tmp_number = str2double(string(41:48));
                    if (isnan(tmp_number))
                        tmp_number_2 = sscanf(string(41:48), '%e%d');
                        if (size(tmp_number_2,1) ~= 2)
                            fprintf (1, '\nНеправильная запись A3 в карточке CORD2C системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(41:48)));
                            ErrCode = -1;
                            return;
                        end
                        COORD{Coord_read_counter}.A(3) = tmp_number_2(1)*10^tmp_number_2(2);
                    else
                        COORD{Coord_read_counter}.A(3) = tmp_number;
                    end

                    % Чтение B1
                    tmp_number = str2double(string(49:56));
                    if (isnan(tmp_number))
                        tmp_number_2 = sscanf(string(49:56), '%e%d');
                        if (size(tmp_number_2,1) ~= 2)
                            fprintf (1, '\nНеправильная запись B1 в карточке CORD2C системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(49:56)));
                            ErrCode = -1;
                            return;
                        end
                        COORD{Coord_read_counter}.B(1) = tmp_number_2(1)*10^tmp_number_2(2);
                    else
                        COORD{Coord_read_counter}.B(1) = tmp_number;
                    end

                    % Чтение B2
                    tmp_number = str2double(string(57:64));
                    if (isnan(tmp_number))
                        tmp_number_2 = sscanf(string(57:64), '%e%d');
                        if (size(tmp_number_2,1) ~= 2)
                            fprintf (1, '\nНеправильная запись B2 в карточке CORD2C системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(57:64)));
                            ErrCode = -1;
                            return;
                        end
                        COORD{Coord_read_counter}.B(2) = tmp_number_2(1)*10^tmp_number_2(2);
                    else
                        COORD{Coord_read_counter}.B(2) = tmp_number;
                    end

                    % Чтение B3
                    if (length(string) < 72)
                        End_index = length(string);
                    else
                        End_index = 72;
                    end
                    tmp_number = str2double(string(65:End_index));
                    if (isnan(tmp_number))
                        tmp_number_2 = sscanf(string(65:End_index), '%e%d');
                        if (size(tmp_number_2,1) ~= 2)
                            fprintf (1, '\nНеправильная запись B3 в карточке CORD2C системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(65:End_index)));
                            ErrCode = -1;
                            return;
                        end
                        COORD{Coord_read_counter}.B(3) = tmp_number_2(1)*10^tmp_number_2(2);
                    else
                        COORD{Coord_read_counter}.B(3) = tmp_number;
                    end
                    
                    % Проверка на конец файла
                    if (feof(Fin))
                        fprintf (1, '\nНеожиданный конец файла во время чтения карточки CORD2C с номером %i !\n', COORD{Coord_read_counter}.ID);
                        ErrCode = -1;
                        return;
                    end

                    % Чтение следующей строки
                    string = fgets(Fin);
                    
                    % Проверка строки
                    if (~((string(1) == '*') || (string(1) == ' ')))
                        fprintf (1, '\nВторая строка в карточке CORD2C системы координат %i не начинается с символа * или с пробела !\n', COORD{Coord_read_counter}.ID);
                        ErrCode = -1;
                        return;
                    end
                    
                    % проверка на записи в 10-ом поле
                    if (deblank(string) > 72)
                        fprintf (1, '\nОбнаружена запись в поле 10 второй строки карточки CORD2C %i !\n', COORD{Coord_read_counter}.ID);
                        fprintf (1, 'Указатели продления карточки не поддерживаются в текущей версии программы.\n');
                        fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                        ErrCode = -1;
                        return;
                    end
                    
                    if (string(1) == '*')

                        % Вторая строка формата LARGE FIELD FORMAT
                        
                        % Чтение C1
                        tmp_number = str2double(string(9:24));
                        if (isnan(tmp_number))
                            tmp_number_2 = sscanf(string(9:24), '%e%d');
                            if (size(tmp_number_2,1) ~= 2)
                                fprintf (1, '\nНеправильная запись C1 в карточке CORD2C системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(9:24)));
                                ErrCode = -1;
                                return;
                            end
                            COORD{Coord_read_counter}.C(1) = tmp_number_2(1)*10^tmp_number_2(2);
                        else
                            COORD{Coord_read_counter}.C(1) = tmp_number;
                        end

                        % Чтение C2
                        tmp_number = str2double(string(25:40));
                        if (isnan(tmp_number))
                            tmp_number_2 = sscanf(string(25:40), '%e%d');
                            if (size(tmp_number_2,1) ~= 2)
                                fprintf (1, '\nНеправильная запись C2 в карточке CORD2C системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(25:40)));
                                ErrCode = -1;
                                return;
                            end
                            COORD{Coord_read_counter}.C(2) = tmp_number_2(1)*10^tmp_number_2(2);
                        else
                            COORD{Coord_read_counter}.C(2) = tmp_number;
                        end

                        % Чтение C3
                        if (length(string) < 56)
                            End_index = length(string);
                        else
                            End_index = 56;
                        end
                        tmp_number = str2double(string(41:End_index));
                        if (isnan(tmp_number))
                            tmp_number_2 = sscanf(string(41:End_index), '%e%d');
                            if (size(tmp_number_2,1) ~= 2)
                                fprintf (1, '\nНеправильная запись C3 в карточке CORD2C системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(41:End_index)));
                                ErrCode = -1;
                                return;
                            end
                            COORD{Coord_read_counter}.C(3) = tmp_number_2(1)*10^tmp_number_2(2);
                        else
                            COORD{Coord_read_counter}.C(3) = tmp_number;
                        end
                        
                    else

                        % Вторая строка формата SMALL FIELD FORMAT
                        
                        % Чтение C1
                        tmp_number = str2double(string(9:16));
                        if (isnan(tmp_number))
                            tmp_number_2 = sscanf(string(9:16), '%e%d');
                            if (size(tmp_number_2,1) ~= 2)
                                fprintf (1, '\nНеправильная запись C1 в карточке CORD2C системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(9:16)));
                                ErrCode = -1;
                                return;
                            end
                            COORD{Coord_read_counter}.C(1) = tmp_number_2(1)*10^tmp_number_2(2);
                        else
                            COORD{Coord_read_counter}.C(1) = tmp_number;
                        end

                        % Чтение C2
                        tmp_number = str2double(string(17:24));
                        if (isnan(tmp_number))
                            tmp_number_2 = sscanf(string(17:24), '%e%d');
                            if (size(tmp_number_2,1) ~= 2)
                                fprintf (1, '\nНеправильная запись C2 в карточке CORD2C системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(17:24)));
                                ErrCode = -1;
                                return;
                            end
                            COORD{Coord_read_counter}.C(2) = tmp_number_2(1)*10^tmp_number_2(2);
                        else
                            COORD{Coord_read_counter}.C(2) = tmp_number;
                        end

                        % Чтение C3
                        if (length(string) < 32)
                            End_index = length(string);
                        else
                            End_index = 32;
                        end
                        tmp_number = str2double(string(25:End_index));
                        if (isnan(tmp_number))
                            tmp_number_2 = sscanf(string(25:End_index), '%e%d');
                            if (size(tmp_number_2,1) ~= 2)
                                fprintf (1, '\nНеправильная запись C3 в карточке CORD2C системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(25:End_index)));
                                ErrCode = -1;
                                return;
                            end
                            COORD{Coord_read_counter}.C(3) = tmp_number_2(1)*10^tmp_number_2(2);
                        else
                            COORD{Coord_read_counter}.C(3) = tmp_number;
                        end

                    end


                    % Для вывода прогресса
                    Counter = Counter + 1;
                    Counter_2 = Counter_2 + 1;
                    if (Counter_2 == N_rec_segm)
                        Counter_2 = 0;
                        Written_count = Written_count + 1;
                        if (Written_count < Time_segments)
                            fprintf (1, '#');
                            pause (Progress_Bar_Delay);
                        end
                    end


                    continue;

                    
                case '*' % LARGE FIELD FORMAT
                    
                    Coord_read_counter = Coord_read_counter + 1;

                    COORD{Coord_read_counter}.card = 'CORD2C';
                    COORD{Coord_read_counter}.ID = [];
                    COORD{Coord_read_counter}.Reference_Coord_ID = 0;
                    COORD{Coord_read_counter}.A = zeros(3,1);
                    COORD{Coord_read_counter}.B = zeros(3,1);
                    COORD{Coord_read_counter}.C = zeros(3,1);

                    % Чтение ID
                    tmp_number = str2double(string(9:24));
                    if (isnan(tmp_number))
                        fprintf (1, '\nНеправильная запись с номером системы координат в карточке CORD2C* : [%s] !\n', strtrim(string(9:24)));
                        ErrCode = -1;
                        return;
                    end
                    COORD{Coord_read_counter}.ID = tmp_number;
                    
                    % проверка на записи в 10-ом поле
                    if (deblank(string) > 72)
                        fprintf (1, '\nОбнаружена запись в поле 10 первой строки карточки CORD2C* %i !\n', COORD{Coord_read_counter}.ID);
                        fprintf (1, 'Указатели продления карточки не поддерживаются в текущей версии программы.\n');
                        fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                        ErrCode = -1;
                        return;
                    end

                    % Чтение Reference Coord ID
                    if (~isnan(str2double(string(25:40))))
                        COORD{Coord_read_counter}.Reference_Coord_ID = str2double(string(25:40));
                    end

                    % Чтение A1
                    tmp_number = str2double(string(41:56));
                    if (isnan(tmp_number))
                        tmp_number_2 = sscanf(string(41:56), '%e%d');
                        if (size(tmp_number_2,1) ~= 2)
                            fprintf (1, '\nНеправильная запись A1 в карточке CORD2C* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(41:56)));
                            ErrCode = -1;
                            return;
                        end
                        COORD{Coord_read_counter}.A(1) = tmp_number_2(1)*10^tmp_number_2(2);
                    else
                        COORD{Coord_read_counter}.A(1) = tmp_number;
                    end

                    % Чтение A2
                    if (length(string) < 72)
                        End_index = length(string);
                    else
                        End_index = 72;
                    end
                    tmp_number = str2double(string(57:End_index));
                    if (isnan(tmp_number))
                        tmp_number_2 = sscanf(string(57:End_index), '%e%d');
                        if (size(tmp_number_2,1) ~= 2)
                            fprintf (1, '\nНеправильная запись A2 в карточке CORD2C* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(57:End_index)));
                            ErrCode = -1;
                            return;
                        end
                        COORD{Coord_read_counter}.A(2) = tmp_number_2(1)*10^tmp_number_2(2);
                    else
                        COORD{Coord_read_counter}.A(2) = tmp_number;
                    end
                    
                    % Проверка на конец файла
                    if (feof(Fin))
                        fprintf (1, '\nНеожиданный конец файла во время чтения карточки CORD2C* с номером %i !\n', COORD{Coord_read_counter}.ID);
                        ErrCode = -1;
                        return;
                    end

                    % Чтение следующей строки
                    string = fgets(Fin);

                    % Проверка строки
                    if (~(string(1) == '*'))
                        fprintf (1, '\nВторая строка в карточке CORD2C* системы координат %i не начинается с символа * !\n', COORD{Coord_read_counter}.ID);
                        ErrCode = -1;
                        return;
                    end
                    
                    % проверка на записи в 10-ом поле
                    if (deblank(string) > 72)
                        fprintf (1, '\nОбнаружена запись в поле 10 второй строки карточки CORD2C* %i !\n', COORD{Coord_read_counter}.ID);
                        fprintf (1, 'Указатели продления карточки не поддерживаются в текущей версии программы.\n');
                        fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                        ErrCode = -1;
                        return;
                    end

                    % Чтение A3
                    tmp_number = str2double(string(9:24));
                    if (isnan(tmp_number))
                        tmp_number_2 = sscanf(string(9:24), '%e%d');
                        if (size(tmp_number_2,1) ~= 2)
                            fprintf (1, '\nНеправильная запись A3 в карточке CORD2C* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(9:24)));
                            ErrCode = -1;
                            return;
                        end
                        COORD{Coord_read_counter}.A(3) = tmp_number_2(1)*10^tmp_number_2(2);
                    else
                        COORD{Coord_read_counter}.A(3) = tmp_number;
                    end

                    % Чтение B1
                    tmp_number = str2double(string(25:40));
                    if (isnan(tmp_number))
                        tmp_number_2 = sscanf(string(25:40), '%e%d');
                        if (size(tmp_number_2,1) ~= 2)
                            fprintf (1, '\nНеправильная запись B1 в карточке CORD2C* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(25:40)));
                            ErrCode = -1;
                            return;
                        end
                        COORD{Coord_read_counter}.B(1) = tmp_number_2(1)*10^tmp_number_2(2);
                    else
                        COORD{Coord_read_counter}.B(1) = tmp_number;
                    end

                    % Чтение B2
                    tmp_number = str2double(string(41:56));
                    if (isnan(tmp_number))
                        tmp_number_2 = sscanf(string(41:56), '%e%d');
                        if (size(tmp_number_2,1) ~= 2)
                            fprintf (1, '\nНеправильная запись B2 в карточке CORD2C* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(41:56)));
                            ErrCode = -1;
                            return;
                        end
                        COORD{Coord_read_counter}.B(2) = tmp_number_2(1)*10^tmp_number_2(2);
                    else
                        COORD{Coord_read_counter}.B(2) = tmp_number;
                    end

                    % Чтение B3
                    if (length(string) < 72)
                        End_index = length(string);
                    else
                        End_index = 72;
                    end
                    tmp_number = str2double(string(57:End_index));
                    if (isnan(tmp_number))
                        tmp_number_2 = sscanf(string(57:End_index), '%e%d');
                        if (size(tmp_number_2,1) ~= 2)
                            fprintf (1, '\nНеправильная запись B3 в карточке CORD2C* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(57:End_index)));
                            ErrCode = -1;
                            return;
                        end
                        COORD{Coord_read_counter}.B(3) = tmp_number_2(1)*10^tmp_number_2(2);
                    else
                        COORD{Coord_read_counter}.B(3) = tmp_number;
                    end
                    
                    % Проверка на конец файла
                    if (feof(Fin))
                        fprintf (1, '\nНеожиданный конец файла во время чтения карточки CORD2C* с номером %i !\n', COORD{Coord_read_counter}.ID);
                        ErrCode = -1;
                        return;
                    end

                    % Чтение следующей строки
                    string = fgets(Fin);

                    % Проверка строки
                    if (~((string(1) == '*') || (string(1) == ' ')))
                        fprintf (1, '\nТретья строка в карточке CORD2C* системы координат %i не начинается с символа * или с пробела !\n', COORD{Coord_read_counter}.ID);
                        ErrCode = -1;
                        return;
                    end
                    
                    % проверка на записи в 10-ом поле
                    if (deblank(string) > 72)
                        fprintf (1, '\nОбнаружена запись в поле 10 третьей строки карточки CORD2C* %i !\n', COORD{Coord_read_counter}.ID);
                        fprintf (1, 'Указатели продления карточки не поддерживаются в текущей версии программы.\n');
                        fprintf (1, 'Обратетись к разработчику для решения этого вопроса.\n');
                        ErrCode = -1;
                        return;
                    end

                    if (string(1) == '*')

                        % Третья строка формата LARGE FIELD FORMAT
                        % Чтение С1
                        tmp_number = str2double(string(9:24));
                        if (isnan(tmp_number))
                            tmp_number_2 = sscanf(string(9:24), '%e%d');
                            if (size(tmp_number_2,1) ~= 2)
                                fprintf (1, '\nНеправильная запись C1 в карточке CORD2C* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(9:24)));
                                ErrCode = -1;
                                return;
                            end
                            COORD{Coord_read_counter}.C(1) = tmp_number_2(1)*10^tmp_number_2(2);
                        else
                            COORD{Coord_read_counter}.C(1) = tmp_number;
                        end

                        % Чтение С2
                        tmp_number = str2double(string(25:40));
                        if (isnan(tmp_number))
                            tmp_number_2 = sscanf(string(25:40), '%e%d');
                            if (size(tmp_number_2,1) ~= 2)
                                fprintf (1, '\nНеправильная запись C2 в карточке CORD2C* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(25:40)));
                                ErrCode = -1;
                                return;
                            end
                            COORD{Coord_read_counter}.C(2) = tmp_number_2(1)*10^tmp_number_2(2);
                        else
                            COORD{Coord_read_counter}.C(2) = tmp_number;
                        end

                        % Чтение С3
                        if (length(string) < 56)
                            End_index = length(string);
                        else
                            End_index = 56;
                        end
                        tmp_number = str2double(string(41:End_index));
                        if (isnan(tmp_number))
                            tmp_number_2 = sscanf(string(41:End_index), '%e%d');
                            if (size(tmp_number_2,1) ~= 2)
                                fprintf (1, '\nНеправильная запись C3 в карточке CORD2C* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(41:End_index)));
                                ErrCode = -1;
                                return;
                            end
                            COORD{Coord_read_counter}.C(3) = tmp_number_2(1)*10^tmp_number_2(2);
                        else
                            COORD{Coord_read_counter}.C(3) = tmp_number;
                        end

                    else

                        % Третья строка формата SMALL FIELD FORMAT

                        % Чтение С1
                        tmp_number = str2double(string(9:16));
                        if (isnan(tmp_number))
                            tmp_number_2 = sscanf(string(9:16), '%e%d');
                            if (size(tmp_number_2,1) ~= 2)
                                fprintf (1, '\nНеправильная запись C1 в карточке CORD2C* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(9:16)));
                                ErrCode = -1;
                                return;
                            end
                            COORD{Coord_read_counter}.C(1) = tmp_number_2(1)*10^tmp_number_2(2);
                        else
                            COORD{Coord_read_counter}.C(1) = tmp_number;
                        end

                        % Чтение С2
                        tmp_number = str2double(string(17:24));
                        if (isnan(tmp_number))
                            tmp_number_2 = sscanf(string(17:24), '%e%d');
                            if (size(tmp_number_2,1) ~= 2)
                                fprintf (1, '\nНеправильная запись C2 в карточке CORD2C* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(17:24)));
                                ErrCode = -1;
                                return;
                            end
                            COORD{Coord_read_counter}.C(2) = tmp_number_2(1)*10^tmp_number_2(2);
                        else
                            COORD{Coord_read_counter}.C(2) = tmp_number;
                        end

                        % Чтение С3
                        if (length(string) < 32)
                            End_index = length(string);
                        else
                            End_index = 32;
                        end
                        tmp_number = str2double(string(25:End_index));
                        if (isnan(tmp_number))
                            tmp_number_2 = sscanf(string(25:End_index), '%e%d');
                            if (size(tmp_number_2,1) ~= 2)
                                fprintf (1, '\nНеправильная запись C3 в карточке CORD2C* системы координат %i : [%s] !\n', COORD{Coord_read_counter}.ID, strtrim(string(25:End_index)));
                                ErrCode = -1;
                                return;
                            end
                            COORD{Coord_read_counter}.C(3) = tmp_number_2(1)*10^tmp_number_2(2);
                        else
                            COORD{Coord_read_counter}.C(3) = tmp_number;
                        end

                    end


                    % Для вывода прогресса
                    Counter = Counter + 1;
                    Counter_2 = Counter_2 + 1;
                    if (Counter_2 == N_rec_segm)
                        Counter_2 = 0;
                        Written_count = Written_count + 1;
                        if (Written_count < Time_segments)
                            fprintf (1, '#');
                            pause (Progress_Bar_Delay);
                        end
                    end


                    continue;
                    
                case ',' % FREE FIELD FORMAT
                    
                    fprintf (1, '\nОшибка функции Read_COORD: FREE FIELD FORMAT файла bdf не поддерживается в текущей версии программы [CORD2C,] !\n');
                    ErrCode = -1;
                    return; 
                    
                otherwise
                    
                    fprintf (1, '\nОшибка функции Read_COORD: непредвиденное значение символа 7 в карточке [CORD2C%s] !\n', string(7));
                    ErrCode = -1;
                    return; 
                
            end
            
        end
        
    end

end


% Для вывода прогресса
if (N_rec_segm == 0)
    for i=1:Time_segments-1
        fprintf (1, '#');
        pause (Progress_Bar_Delay);
    end
end
fprintf (1, '# ');
pause (Progress_Bar_Delay);


% Обработка исключений
if (Coord_read_counter < N_Coord)
    fprintf (1, '\nОшибка функции Read_COORD: Coord_read_counter < N_Coord !\n');
    ErrCode = -1;
    return;        
end

fprintf (1, 'OK!\n');
